//package com.tjetc;
//
//public class _6ThreadMethod {
//    public static void main(String[] args) throws InterruptedException {
//        /*
//            3. 守护线程： 用来保护用户线程 用户线程结束，则守护线程也结束
//         */
//
//        MyThread2 myThread2 = new MyThread2();
//        // 设置为守护线程
//        myThread2.setDaemon(true);
//        myThread2.start();
//        for (int i = 0; i < 5; i++) {
//            Thread.sleep(1000);
//            System.out.println(i);
//        }
//    }
//
//    public static void main2(String[] args) throws InterruptedException {
//        /*
//            1. yield:线程的礼让。让出cpu,让其他线程执⾏，但礼让的时间不确定，所以也不⼀定礼让成功
//            2. join:线程的插队。插队的线程⼀旦插队成功，则肯定先执⾏完插⼊的线程所有的任务
//            ⽐如：main线程创建⼀个⼦线程，每隔1s输出hello, 输出20次，主线程每隔1秒，输出hi,输出
//            20次.
//            要求： 两个线程同时执⾏，当主线程输出5次后，就让⼦线程运⾏完毕，主线程再继续。
//
//
//         */
//        MyThread1 thread1 = new MyThread1();
//        thread1.start();
//        for (int i = 0; i < 30; i++) {
//            Thread.sleep(1000);
//            System.out.println("hi," + "main.i = " + i);
//            if (i == 5) {
//                // 线程的礼让 cpu比较充足的时候
////                Thread.yield();
//                // 线程的插队
//                thread1.join();
//            }
//        }
//    }
//    public static void main1(String[] args) throws InterruptedException {
//        /*
//            线程方法：
//            1. setName //设置线程名称，使之与参数name相同
//            2. getName //返回该线程的名称
//            3. start //使该线程开始执⾏；Java虚拟机底层调⽤该线程的
//            start0⽅法
//            4. run //调⽤线程对象run⽅法；
//            5. setPriority //更改线程的优先级
//            6. getPriority //获取线程的优先级
//            7. sleep //在指定的毫秒数内让当前正在执⾏的线程休眠(暂
//            停执⾏)
//            8. interrupt //中断线程
//         */
//
//        Thread thread = new MyThread();
//        System.out.println(thread.getName());
//        thread.setName("MyThread");
//        System.out.println(thread.getName());
//        // 优先级设置后不一定生效 他还和操作系统的调度
//        System.out.println("thread.getPriority() = " + thread.getPriority());
//
//        thread.setPriority(Thread.NORM_PRIORITY);
//
//        thread.start();
//        Thread.sleep(2000);
//        thread.interrupt();
//
//
//        // 这里不能控制线程的执行顺序
////        Thread thread1 = new MyThread();
////        thread1.start();
////        thread.start();
//    }
//}
//
//class MyThread extends Thread{
//    @Override
//    public void run() {
//        try {
//            Thread.sleep(10000);
//            // 中断异常 当出现中断线程的时候 这个异常会被捕获 然后执行异常流程
//        } catch (InterruptedException e) {
//            System.out.println("e.getMessage() = " + e.getMessage());
//        }
//    }
//}
//
//
//class MyThread1 extends Thread {
//    @Override
//    public void run() {
//        for (int i = 0; i < 30; i++) {
//            try {
//                Thread.sleep(1000);
//            } catch (InterruptedException e) {
//                throw new RuntimeException(e);
//            }
//            System.out.println("hello" + ",thread.i = " + i);
//        }
//    }
//}
//
//
//class MyThread2 extends Thread {
//    @Override
//    public void run() {
//        while (true) {
//            try {
//                Thread.sleep(1000);
//            } catch (InterruptedException e) {
//                throw new RuntimeException(e);
//            }
//            System.out.println("守护线程执行");
//        }
//    }
//}
